/**
 * @file
 *
 * Header del modulo per la gestione delle immagini utilizzate dal programma.
 *
 * In questo file vengono gestite le immagini incluse in fase di compilazione
 * nell'eseguibile. \n
 * Le immagini inizialmente devono essere rese disponibili al programma
 * chiamando la funzione ::load_xpm_images ed in seguito possono essere
 * utilizzate chiamando le funzioni ::image_new_from_pix e ::image_set_from_pix.
 */

// Author: Adrian Sassatelli
// Copyright (c) 2014 Adrian Sassatelli


#include <gtk/gtk.h>


/* -------------------------------------------------------------------------- */
/*    DEFINIZIONI                                                             */
/* -------------------------------------------------------------------------- */

/**
 * Enumeratore delle immagini disponibili a runtime.
 */
enum pix_image_e {
    PI_BUTTON_CHECKED, PI_BUTTON_MAYBE, PI_BUTTON_NORMAL, PI_BUTTON_PRESSED,
    PI_BUTTON_EXPLODED, PI_BUTTON_MINE, PI_BUTTON_MINEERR,
    PI_BUTTON_NEAR1, PI_BUTTON_NEAR2, PI_BUTTON_NEAR3, PI_BUTTON_NEAR4, PI_BUTTON_NEAR5, PI_BUTTON_NEAR6, PI_BUTTON_NEAR7, PI_BUTTON_NEAR8,
    PI_NONE,
    PI_NUMBER0, PI_NUMBER1, PI_NUMBER2, PI_NUMBER3, PI_NUMBER4, PI_NUMBER5, PI_NUMBER6, PI_NUMBER7, PI_NUMBER8, PI_NUMBER9, PI_NUMBER_SEP1, PI_NUMBER_SEP2,
    PI_STATUS_LOST, PI_STATUS_NORMAL, PI_STATUS_WIN
};


/* -------------------------------------------------------------------------- */
/*    FUNZIONI                                                                */
/* -------------------------------------------------------------------------- */

/**
 * Crea un nuovo oggetto immagine partendo dalle immagini disponibile a runtime.
 *
 * @param[in] apixid ID dell'immagine
 * @return Nuovo oggetto GtkImage contenete l'immagine desiderata
 */
GtkImage *image_new_from_pix (const pix_image_e apixid);

/* -------------------------------------------------------------------------- */

/**
 * Imposta l'immagine dell'oggetto partendo dalle immagini disponibile a runtime.
 *
 * @param[inout] aimage Oggetto immagine da impostare
 * @param[in] apixid ID dell'immagine
 */
void image_set_from_pix (GtkImage *aimage, const pix_image_e apixid);

/* -------------------------------------------------------------------------- */

/**
 * Rende disponibili al programma le immagini incluse in fase di compilazione.
 *
 * Le immagini, nella fase di caricamento, vengono ridimensionate con queste
 * dimensioni:
 * * le immagini relative alle caselle hanno una dimensione impostata tramite
 *   ::IMG_BUTTON_DIM (definito in common.h)
 * * le immagini relative allo stato della partita hanno una dimensione
 *   impostata tramite ::IMG_STATUS_DIM (definito in common.h)
 *
 * Le immagini possono essere utilizzate tramite le funzioni
 * ::image_new_from_pix e ::image_set_from_pix 
 */
 void load_xpm_images ();

/* -------------------------------------------------------------------------- */

/**
 * Restituisce l'immagine relativa all'id selezionato.
 *
 * @param[in] apixid ID dell'immagine
 * @return Oggetto GdkPixbux contenete l'immagine ricercata
 */
GdkPixbuf *pixid_to_image (const pix_image_e apixid);

/* -------------------------------------------------------------------------- */

/**
 * Restituisce l'immagine della cifra relativa al parametro in ingresso.
 *
 * In base al numero passato come parametro, imposta l'immagine relativa a quel
 * numero sul widget desiderato.
 *
 * @param[inout] aimage Puntatore al widget GtkImage di destinazione
 * @param[in] anum Cifra numerica da visualizzare
 */
void show_image_number (GtkImage *aimage, const int anum);

/* -------------------------------------------------------------------------- */

/**
 * Libera la memoria dalle immagini.
 */
void unload_xpm_images ();

/* -------------------------------------------------------------------------- */
